package com.back.encrypt;

import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;

public class SM2HutoolUtil {
    public static void main(String[] args) {
        // 1. 生成 SM2 密钥对（Hutool 自动生成符合国密标准的密钥）
        SM2 sm2 = SmUtil.sm2();
        // 获取公钥/私钥（支持 Base64、Hex 格式）
        String publicKeyBase64 = sm2.getPublicKeyBase64();
        String privateKeyBase64 = sm2.getPrivateKeyBase64();
        System.out.println("生成公钥（Base64）：" + publicKeyBase64);
        System.out.println("生成私钥（Base64）：" + privateKeyBase64);

        // 2. 原文
        String plainText = "Hutool SM2 快速加密测试 - 国密算法";
        System.out.println("原文：" + plainText);

        // 3. 加密（公钥加密，默认返回 Base64 格式）
        String cipherBase64 = sm2.encryptBase64(plainText, KeyType.PublicKey);
        System.out.println("加密后（Base64）：" + cipherBase64);

        // 4. 解密（私钥解密）
        String decryptedText = sm2.decryptStr(cipherBase64, KeyType.PrivateKey);
        System.out.println("解密后：" + decryptedText);

        //-----------------------------直接提供密钥对
        // 扩展：从已有密钥初始化 SM2（实际项目中常用）
        SM2 sm2FromKey = SmUtil.sm2(privateKeyBase64, publicKeyBase64);
        String cipher2 = sm2FromKey.encryptBase64("从已有密钥加密", KeyType.PublicKey);
        String decrypt2 = sm2FromKey.decryptStr(cipher2, KeyType.PrivateKey);
        System.out.println("扩展测试 - 解密后：" + decrypt2);
    }
}
